【PHP/演習問題】parent[1]

【PHP/演習問題】parent[1]

問題

次の実行結果になる会計プログラムを作成してください。
なお、下記条件を満たすものとします。

  • 小計クラス(Subtotal)を作成する
  • 小計クラスは複数料金を記憶する$pricesフィールド(配列)を持つ
  • 小計クラスは小計金額を計算するcalcメソッドを持つ(小計金額は$pricesに記憶された値の合計値)
  • 会計クラス(Bill)を作成する
  • 会計クラスは小計クラスを継承する
  • 会計クラスはcalcメソッドをオーバーライドし、小計に消費税を加算した値を計算する。
    ※ 消費税率は10%とします。
  • 会計クラスのcalcメソッドは小計クラスのcalcメソッドを使う
  • 料金は標準入力で与える(空文字を入力するまで)
$ php practice.php
1000
2300
3500

合計金額 : 7480円

解答例

<?php

class Subtotal {
    
    public $prices = [];
    
    public function __construct( $prices ) {
        $this->prices = $prices;
    }
    
    public function calc() {
        $total = 0;
        foreach( $this->prices as $price ) {
            $total += $price;
        }
        return $total;
    }
    
}

class Bill extends Subtotal {
    
    public const TAX_RATE = 0.1;
    
    public function calc() {
        $total = parent::calc();
        $total = $total + $total * self::TAX_RATE;
        return $total;
    }
    
}

$prices = [];
while( true ) {
    $price = trim(fgets(STDIN));
    if( $price == '' ) {
        break;
    }
    $prices[] = $price;
}

$bill = new Bill($prices);

$total = $bill->calc();

echo '合計金額 : '.$total."円\n";

?>